package com.kitty.spring.annotationdriven.configuration;

import com.kitty.spring.annotationdriven.beans.*;
import com.kitty.spring.annotationdriven.factory.MyFactoryBean;
import com.kitty.spring.annotationdriven.importcustomize.MyImportBeanDefinitionRegistrar;
import com.kitty.spring.annotationdriven.importcustomize.MyImportSelector;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * 指定初始化和销毁方法
 * 1） @Bean(initMethod = "init",destroyMethod = "destroy")注解中添加初始化和销毁方法
 * 2）让bean实现InitializingBean接口和DisposableBean接口
 * 3）JSR250规范；使用注解标注方法实现； @PostConstruct（用于初始化方法） @PreDestroy（用于销毁方法）
 * 4）通过spring提供的后置处理器进行指定初始化和销毁方法：
 *      @see BeanPostProcessor  【postProcessBeforeInitialization】【postProcessAfterInitialization】
 *      spring底层对BeanPostProcessor的使用：bean赋值；注入其他组件；@autowired；生命周期注解功能；@async
 *
 * @Author SHEN
 * @Date 2020/12/6
 */
@Configuration
public class BeanConfigLifeStylr {


    //@Bean(initMethod = "init",destroyMethod = "destroy")
    @Bean
    public BeanLifecycle beanLifecycle(){
        return new BeanLifecycle();
    }


    //@Bean
    public Cat cat(){
        return new Cat();
    }


}
